package com.thinkgsp.jxc.service;

import java.util.List;

import org.apache.ibatis.session.RowBounds;

import com.thinkgsp.jxc.model.Product;
import com.thinkgsp.jxc.model.ProductClassify;
import com.thinkgsp.jxc.model.ProductManuf;
import com.thinkgsp.jxc.persistence.mybatis.PagingResult;
import com.thinkgsp.sys.persistence.PersistenceException;


public interface ProductService {

//	/**
//	 * 设置ProductMapper对象，本方法只用于测试目的。
//	 * @param productMapper
//	 */
//	public void setProductMapper(ProductMapper productMapper);
	
	/**
	 * 获取产品对象
	 * @param productId
	 */
	public Product getProduct(Integer productId);
	
	/**
	 * 获取所有已删除的产品
	 * @return
	 */
	public List<Product> getDeletedProducts();
	
	/**
	 * 获取所有已删除的产品(分页)
	 * @return
	 */
	public PagingResult<Product> getDeletedProductsPaging(RowBounds rows);
	
	/**
	 * 保存产品对象,包含所有扩展属性
	 * @param product
	 */
	public void saveProduct(Product product)  throws ModelExistsException,PersistenceException;
	
	/**
	 * 禁用产品对象,将产品的deleted设置为false,如果本商品本期有发生额或者有存货不允许禁用
	 * @param productId
	 */
	public void disableProduct(Integer productId);
	
	/**
	 * 启用商品
	 * @param productId
	 */
	public void enableProduct(Integer productId);
	
	/**
	 * 获取所有的产品生产企业
	 * @return
	 */
	public List<ProductManuf> getAllProductManuf();
	
	
	/**
	 * 获取产品的生产企业
	 * @param manufId 生产企业ID
	 * @return
	 */
	public ProductManuf getProductManuf(Integer manufId);
	
	/**
	 * 搜索产品生产企业
	 * @param val 可以为生产企业许可证，生产企业名称以及生产企业名称拼音首字母
	 * @return
	 */
	public List<ProductManuf> searchProductManuf(String val);
	
	/**
	 * 保存产品生产企业信息
	 * @param productManuf
	 */
	public void saveProductManuf(ProductManuf productManuf) throws ModelExistsException,PersistenceException;
	
	/**
	 * 删除产品生产企业信息
	 * @param manufId
	 */
	public void deleteProductManuf(Integer manufId);
	
	/**
	 * 保存商品分类信息,本方法不保存子分类，必须自己保存子分类
	 * @param productClassify
	 */
	public void saveProductClassify(ProductClassify productClassify) throws ModelExistsException,PersistenceException;
	
	/**
	 * 删除商品分类信息，如果有子分类不允许删除
	 * @param classifyId
	 */
	public void deleteProductClassify(Integer classifyId) throws ServiceException;
	
	/**
	 * 获取产品分类
	 * @param classifyId 产品分类Id
	 * @return
	 */
	public ProductClassify getProductClassify(Integer classifyId);
	
	/**
	 * 获取根的产品分类，并且装载所有子节点
	 * @return
	 */
	public ProductClassify getProductClassifyTree();
	
	/**
	 * 搜索产品
	 * @param val
	 * @return
	 */
	public List<Product> searchProducts(String val);
	
	/**
	 * 搜索产品，分页显示结果
	 * @param val
	 * @param start
	 * @param size
	 * @return
	 */
	public PagingResult<Product> searchProducts(String val,int start,int size);
	/**
	 * 根据产品类型查询商品列表
	 * @param classifyId
	 * @return
	 */
	public List<Product> getProductsByClassifyId(int classifyId);
	
	/**
	 * 根据产品类型查询产品列表(分页)
	 * @param classifyId
	 * @param start
	 * @param size
	 * @return
	 */
	public PagingResult<Product> getProductsByClassifyId(int classifyId,int start,int size);
	
	/**
	 * 根据生产企业查询商品列表
	 * @param manufId
	 * @return
	 */
	public List<Product> getProductsByManufId(int manufId);
	
	/**
	 * 转换汉字为其拼音的首字母
	 * @param chs
	 * @return
	 */
	public String convertChineseToPinYin(String chs);
}
